╘HIS PROGRAM PRINTS A MESSAGE ON TOP OF THE SCREEN. ╘HE MESSAGE THEN FALLS DOWN, ONE LETTER AT A TIME, RANDOMLY. ╔NCLUDED ARE SOUNDS APPROPRIATE TO THE TASK.
╘HE PROGRAM USES DEFINED CHARACTERS FROM THE PREVIOUS SECTION. ┘OU DO NOT HAVE TO HAVE THEM, BUT IT WOULD BE NICE, IF THEY ARE STILL IN THE COMPUTER. ╔F THEY AREN'T, YOU CAN ╠╧┴─"╬┼╫ ├╚┴╥" AND ╥╒╬ IT BEFORE TYPING THIS IN.
// PRG: ├-16 FALLS //
Ç*FP20
*** ╓┴╥╔┴┬╠┼╙ ***
─$ POSITIONING STRING
╠1 AND ╠2 SCREEN LINE NUMBERS
╓╠ ╘┼─ VOLUME REGISTER
╓$ THE SIGN WE PRINT
├$ COLORS OF EACH LETTER IN THE SIGN
╠$ LUMINANCE OF EACH LETTER IN THE SIGN
╠╓Çú LENGTH OF THE MESSAGE
╪ TAB POSITION FOR CENTERING ON THE LINE
├%() TABLE OF COLORS OF THE LETTERS
╠%() TABLE OF LUMINANCES
─ TIME DELAY
╚$ TABULATES LETTERS USED ALREADY
╥ RANDOM NUMBER FOR LETTER PICKING
╪% RANDOM NUMBER FOR EXPLOSION SOUND
┴$ WORKING VALUE: ANY CHARACTER FROM
THE STRING
═ COUNTS TIME DELAY IN PRINTING
╔$ KEYBOARD INPUT
╘HE SCREEN LOOKED LIKE THIS AFTER SEVERAL PASSES THROUGH THE PROGRAM (THE PICTURE IS COMPRESSED):
// PIC: C16FALLS //
┘OU HAVE TO USE A BIT OF IMAGINATION HERE. ╘HE PRINTER DIDN'T KNOW ABOUT OUR NEW CHARACTERS, SO THIS PICTURE REFLECTS A STATE OF AFFAIRS, BUT NOT EXACT DETAILS.
Ç*FP3
*** ╔╬╙╘╥╒├╘╔╧╬╙ ***
╔N LINE 150, ─$ IS MADE UP OF ╚╧═┼ AND ONE CURSOR-DOWN CHARACTERS. ╔N LINE 170, ├╚╥$(14) PLACES THE COMPUTER IN UPPER CASE/GRAPHICS MODE, AND IN THE QUOTES WE HAVE ├╠┼┴╥-THE-SCREEN AND ONE CURSOR DOWN CHARACTERS. ╔N LINE 320 WE HAVE, IN QUOTES AGAIN, A SPACE, CURSOR DOWN AND CURSOR LEFT. ╘HEN ┴$, WHICH YOU CAN SEE, FOLLOWED BY ONE CURSOR LEFT IN QUOTES.
╙┴╓┼ THE PROGRAM BEFORE RUNNING. ╘HEN INSERT A ╥┼═ IN LINE 140. ╘HIS IS THE, NOW FAMILIAR, LINE WHICH SETS UP OUR SPECIAL CHARACTERS. ╦EEP THIS LINE DISABLED UNTIL YOU HAVE NO ERRORS IN THE PROGRAM. ╘HEN REMOVE THE ╥┼═ARK.
╘O STOP THE PROGRAM AT ANY TIME PRESS ╤, HEAR THE FINAL BOOM, THEN PUSH ANY OTHER KEY.
*** ─┼╘┴╔╠╙ ***
╘HE MESSAGE WE USE IS THE SAME AS IN THE PREVIOUS SECTION. ╔T IS IN ─┴╘┴ LINES. ┬UT THIS TIME WE MAKE EACH OF THE VERTICAL BAR LETTERS A DIFFERENT COLOR AND LUMINANCE. ╔T IS A LITTLE TRICKY TO SET THEM UP. ╘WO ─┴╘┴ LINES, HOWEVER, TAKE CARE OF THE SETUP EASILY. ╘HE NICE THING IS THAT YOU CAN CHANGE IT EQUALLY EASILY. ╔F YOUR ╘╓ OR MONITOR DOESN'T SHOW THE RIGHT COLORS, YOU CAN PLAY WITH THE LAST TWO ─┴╘┴ LINES UNTIL YOU LIKE WHAT YOU SEE. ┘OU DO NOT HAVE TO MODIFY THE REST OF THE CODE.
╙INCE THERE ARE SEVERAL SEPARATE TASKS THIS PROGRAM PERFORMS, THE ─┼╘┴╔╠╙ SECTION IS SUBDIVIDED INTO PARTS.
*** ├╧─╔╬╟ ├╧╠╧╥╙ ┴╬─ ┬╥╔╟╚╘╬┼╙╙ ***
╘HE FIRST ─┴╘┴ LINE AFTER THE MESSAGE ITSELF CONTAINS COLOR NUMBERS, CODED AS LETTERS. ╙O COLOR 1 IS ┴, COLOR 3 IS ├ AND SO ON. ╘HE SECOND ─┴╘┴ LINE CONTAINS LUMINANCES FOR EACH COLOR. ╘HE TRANSLATION IS OBVIOUS: A ZERO IS A ZERO, AND A 7 IS A 7. ╠INE THEM UP PROPERLY, AND YOU HAVE AN EASY THING TO WORK WITH.
╠INE 160 READS THE ─┴╘┴ LINES, AND DECIDES ON CENTERING THE STRING (╪ VALUE). ╠INES 170-200 DO A LOT OF WORK. ╘HEY SET UP A TABLE OF COLORS AND LUMINANCES FOR EACH LETTER. ╘HEY PRINT ONE LETTER AT A TIME AND CLICK THE SPEAKER A LITTLE. ╘HE MAIN REASON FOR THE TABLES IS SPEED - ANIMATION IN ┬┴╙╔├ IS SLOW, THE MORE VALUES WE SETUP BEFOREHAND, THE FASTER WILL THINGS MOVE.
*** ╫╚╧'╙ ╬┼╪╘? ***
╬OW THE MEAT OF THE PROGRAM. ╠INES 210-270 PICK UP RANDOM LETTERS AND DROP THEM. ╘HIS REQUIRES CARE: WE HAVE A "HIT-LIST" IN STRING ╚$. ╔F A LETTER ALREADY DROPPED, WE MARK IT WITH AN ╪ TO PREVENT US FROM TRYING TO DROP IT AGAIN. ╘HE RANDOM NUMBER GENERATOR (╥╬─ IN LINE 220) MUST ALWAYS GIVE A NEW VALUE.
╧NCE WE GET A VALUE, THEN IF A LETTER IN THE ORIGINAL STRING IS NOT A SPACE WE PRINT IT AT TAB POSITION ╪ PLUS THE RANDOM NUMBER (ONE IS SUBTRACTED, BECAUSE ╘┴┬ COUNTS FROM ZERO). ╔F IT IS A SPACE, WE DO NOTHING. ╫E LOOP BACK FOR MORE WORK (UNLESS YOU PUSHED THE ╤-KEY) IF THERE ARE MORE LETTERS TO DO.
╙OME LETTERS JUST FALL AND MAKE A SOUND. ╧THERS CAUSE AN EXPLOSION SOUND, THIS IS DETERMINED BY ANOTHER ╥╬─ NUMBER, IN LINE 260. ╔T'S ARBITRARY. ┘OU CAN CHANGE IT.
*** ═┴╦╔╬╟ ╠┼╘╘┼╥╙ ╞┴╠╠ ─╧╫╬ ***
╚OW DO WE MOVE LETTERS DOWN THE SCREEN? ╔T'S A WHOLE DIFFERENT STORY. ╘HAT'S CODED IN A SUBROUTINE IN LINES 300-350. ╔GNORE THE ╙╧╒╬─ AND ╓╧╠ COMMANDS FOR A WHILE. ┴LL THE REST HAS TO TO WITH PRINTING AND ERASING A CHARACTER AT SUCCESSIVELY HIGHER LINE NUMBERS.
╘HE FALL IS FROM LINE ╠1 TO ╠2. ╧N EACH LINE WE SET THE COLOR AND LUMINANCE TO THE VALUES WE SAVED BEFORE. ╫E PRINT A SPACE TO WIPE THE EXISTING CHARACTER, CURSOR DOWN, CURSOR LEFT, THE FALLING CHARACTER, ┴$, GIVEN TO US BY THE MAIN PROGRAM (LINE 240), AND CURSOR LEFT AGAIN. ╙O THE CURSOR IS LEFT RIGHT ON THE CHARACTER. ╬EXT TIME AROUND THE SPACE GETS PRINTED OVER IT, AND SO ON, AND ON UNTIL WE REACH LINE ╠2. ┘OU COULD TRY THIS PROCESS IN DIRECT MODE WITH THE CURSOR. ╔F YOU FOLLOW THE STEPS, YOU'LL UNDERSTAND ONE WAY OF MOVING CHARACTERS ON THE SCREEN.
*** ╞┴╠╠╔╬╟ ┴╬─ ┼╪╨╠╧╙╔╧╬ ╙╧╒╬─╙ ***
╫E USE ╙╧╒╬─1 WHILE FALLING. ╔TS PITCH CHANGES IN RELATION TO LINE NUMBER. ┘OU CAN REALLY CHANGE THE FORMULA IN LINE 310 TO ANYTHING YOU WISH. ╘HE "2" IN THE THIRD VALUE OF THE ╙╧╒╬─ COMMAND IS THE SOUND'S DURATION. ╨LAY WITH IT TO SEE IF YOU CAN COORDINATE THE DURATION WITH THE RATE OF FALL. ╘HE DURATION RUNS INDEPENDENT OF ┬┴╙╔├ PROGRAM. ╔F IT BOTHERS YOU, YOU MAY INSERT ╙╧╒╬─1,0,0 COMMAND AS THE LAST THING IN LINE 300.
╫HEN WE NEED THE EXPLOSION SOUND OR THE CLICKING SOUNDS, WE USE THE SUBROUTINE IN LINES 330-350. ╔T IS RARE TO HAVE TO ╨╧╦┼ THINGS IN THIS COMPUTER, BUT TO PRODUCE A NOISE-TYPE-SOUND WITH VARYING VOLUME, WE HAVE TO RESORT TO ╨╧╦┼ING THE MEMORY WHERE THE ╓╧╠ IS SET. ╧THERWISE, PLAIN ┬┴╙╔├ ╓╧╠ CHANGE COMMAND DOES ABSOLUTELY NOTHING, UNTIL ITS DURATION IS EXHAUSTED, WHICH IS WHEN WE DON'T NEED IT ANY MORE.
*** ╨╥╧╩┼├╘╙ ***
├HANGE THE MESSAGE. ├HANGE THE COLOR AND LUMINANCES OF THE CHARACTERS. ├HANGE THE SPAN OF THE SCREEN LINES ON WHICH THE DROP OCCURS. ├HANGE THE SOUNDS.
╔F YOU HAVE TROUBLE UNDERSTANDING HOW LETTERS ARE PICKED AND KEPT TRACK OF, INSTERT THE ╙╘╧╨ COMMAND SOMEWHERE BETWEEN LINE 210 AND 270 AND PRINT THE RELEVANT VARIABLES: ╓$, ╚$, ┴$, AS WELL AS ╥ AND ╪. ┘OU CAN CONTINUE THE PROGRAM FROM WHERE IT LEFT OFF BY TYPING ├╧╬╘ AND PUSHING ╥┼╘╒╥╬.